// pages/login/login.js
const { post } = require('../../utils/request')
const { showSuccess, showError } = require('../../utils/util')

Page({
  data: {
    isLogin: true, // true: 登录模式, false: 注册模式
    formData: {
      username: '',
      password: '',
      confirmPassword: '',
      name: '',
      phone: ''
    },
    submitting: false
  },

  onLoad() {
    // 检查是否已登录
    const app = getApp()
    if (app.globalData.isLogin) {
      wx.switchTab({
        url: '/pages/index/index'
      })
    }
  },

  // 用户名输入
  onUsernameInput(e) {
    this.setData({
      'formData.username': e.detail.value
    })
  },

  // 密码输入
  onPasswordInput(e) {
    this.setData({
      'formData.password': e.detail.value
    })
  },

  // 确认密码输入
  onConfirmPasswordInput(e) {
    this.setData({
      'formData.confirmPassword': e.detail.value
    })
  },

  // 姓名输入
  onNameInput(e) {
    this.setData({
      'formData.name': e.detail.value
    })
  },

  // 手机号输入
  onPhoneInput(e) {
    this.setData({
      'formData.phone': e.detail.value
    })
  },

  // 切换登录/注册模式
  switchMode() {
    this.setData({
      isLogin: !this.data.isLogin,
      formData: {
        username: '',
        password: '',
        confirmPassword: '',
        name: '',
        phone: ''
      }
    })
  },

  // 表单验证
  validateForm() {
    const { username, password, confirmPassword, name, phone } = this.data.formData

    if (!username.trim()) {
      showError('请输入用户名')
      return false
    }

    if (username.trim().length < 3) {
      showError('用户名至少需要3个字符')
      return false
    }

    if (!password.trim()) {
      showError('请输入密码')
      return false
    }

    if (password.trim().length < 6) {
      showError('密码至少需要6个字符')
      return false
    }

    // 注册时的额外验证
    if (!this.data.isLogin) {
      if (!confirmPassword.trim()) {
        showError('请确认密码')
        return false
      }

      if (password !== confirmPassword) {
        showError('两次输入的密码不一致')
        return false
      }

      if (!name.trim()) {
        showError('请输入姓名')
        return false
      }

      if (!phone.trim()) {
        showError('请输入手机号')
        return false
      }

      if (!/^1[3-9]\d{9}$/.test(phone.trim())) {
        showError('请输入正确的手机号')
        return false
      }
    }

    return true
  },

  // 提交表单
  async onSubmit() {
    if (this.data.submitting) return

    if (!this.validateForm()) return

    this.setData({ submitting: true })

    try {
      if (this.data.isLogin) {
        await this.handleLogin()
      } else {
        await this.handleRegister()
      }
    } catch (err) {
      showError(err.message || '操作失败')
    } finally {
      this.setData({ submitting: false })
    }
  },

  // 处理登录
  async handleLogin() {
    const { username, password } = this.data.formData

    // 先尝试管理员登录
    let loginData = {
      username: username.trim(),
      password: password.trim(),
      role: 'ADMIN'
    }

    try {
      let res = await post('/login', loginData)

      if (res.code === '200') {
        const userInfo = res.data

        // 保存用户信息到全局
        const app = getApp()
        app.login(userInfo)

        showSuccess('管理员登录成功')

        // 延迟跳转
        setTimeout(() => {
          wx.switchTab({
            url: '/pages/index/index'
          })
        }, 1000)
        return
      }
    } catch (err) {
      // 管理员登录失败，尝试普通用户登录
      console.log('管理员登录失败，尝试普通用户登录')
    }

    // 尝试普通用户登录
    loginData = {
      username: username.trim(),
      password: password.trim(),
      role: 'USER'
    }

    const res = await post('/login', loginData)

    if (res.code === '200') {
      const userInfo = res.data

      // 保存用户信息到全局
      const app = getApp()
      app.login(userInfo)

      showSuccess('登录成功')

      // 延迟跳转
      setTimeout(() => {
        wx.switchTab({
          url: '/pages/index/index'
        })
      }, 1000)
    } else {
      throw new Error(res.msg || '登录失败')
    }
  },

  // 处理注册
  async handleRegister() {
    const { username, password, name, phone } = this.data.formData

    const registerData = {
      username: username.trim(),
      password: password.trim(),
      name: name.trim(),
      phone: phone.trim(),
      role: 'USER'
    }

    const res = await post('/register', registerData)
    
    if (res.code === '200') {
      showSuccess('注册成功，请登录')
      
      // 切换到登录模式并填入用户名
      this.setData({
        isLogin: true,
        'formData.username': username.trim(),
        'formData.password': '',
        'formData.confirmPassword': '',
        'formData.name': '',
        'formData.phone': ''
      })
    } else {
      throw new Error(res.msg || '注册失败')
    }
  },

  // 返回主页
  goToHome() {
    wx.switchTab({
      url: '/pages/index/index'
    })
  },

  // 游客登录
  guestLogin() {
    // 直接跳转到首页，不设置登录状态
    wx.switchTab({
      url: '/pages/index/index'
    })
  },

  // 显示服务条款
  showTerms() {
    wx.showModal({
      title: '用户服务协议',
      content: '这里是用户服务协议的内容...',
      showCancel: false,
      confirmText: '知道了'
    })
  },

  // 显示隐私政策
  showPrivacy() {
    wx.showModal({
      title: '隐私政策',
      content: '这里是隐私政策的内容...',
      showCancel: false,
      confirmText: '知道了'
    })
  }
})
